﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace TangoFamilyAndGuide.DB
{
    public class Publicidad : db
    {
        public Publicidad(Entidades.Sesion Sesion) : base(Sesion)
        {
        }
        public List<Entidades.Publicidad> LeerListaPublicidadesPorUsuario()
        {
            List<Entidades.Publicidad> lista = new List<Entidades.Publicidad>();
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("select Publicidad.IdCatalogo, Publicidad.IdPublicidad, Publicidad.IdUsuario, Publicidad.ImageUrl, Publicidad.NavigateUrl, Publicidad.AlternateText, Publicidad.Impression, Publicidad.Keyword, Publicidad.Estado ");
                a.Append("from Publicidad where Publicidad.IdUsuario in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='OperPublicidad' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active') ");
                DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
                if (dt.Rows.Count != 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        Entidades.Publicidad publicidad = new Entidades.Publicidad();
                        publicidad.Id = Convert.ToInt32(dt.Rows[i]["IdPublicidad"]);
                        Copiar(dt.Rows[i], publicidad);
                        lista.Add(publicidad);
                    }
                }
            }
            return lista;
        }
        public void Leer(Entidades.Publicidad Publicidad)
        {
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select Publicidad.IdCatalogo, Publicidad.IdPublicidad, Publicidad.IdUsuario, Publicidad.ImageUrl, Publicidad.NavigateUrl, Publicidad.AlternateText, Publicidad.Impression, Publicidad.Keyword, Publicidad.Estado ");
            a.Append("from Publicidad ");
            a.Append("where Publicidad.IdPublicidad = " + Publicidad.Id + " ");
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count == 0)
            {
                throw new TangoFamilyAndGuide.EX.Validaciones.ElementoInexistente("Publicidad " + Publicidad.Id);
            }
            else
            {
                Copiar(dt.Rows[0], Publicidad);
            }
        }
        private void Copiar(DataRow Desde, Entidades.Publicidad Hasta)
        {
            Hasta.Catalogo = Convert.ToString(Desde["IdCatalogo"]);
            Hasta.Id = Convert.ToInt32(Desde["IdPublicidad"]);
            Hasta.Usuario.Id = Convert.ToString(Desde["IdUsuario"]);
            Hasta.ImageUrl = Convert.ToString(Desde["ImageUrl"]);
            Hasta.NavigateUrl = Convert.ToString(Desde["NavigateUrl"]);
            Hasta.AlternateText = Convert.ToString(Desde["AlternateText"]);
            Hasta.Impression = Convert.ToString(Desde["Impression"]);
            Hasta.Keyword = Convert.ToString(Desde["Keyword"]);
            Hasta.WF.Estado = Convert.ToString(Desde["Estado"]);
        }
        public int Crear(Entidades.Publicidad Publicidad)
        {
            StringBuilder a = new StringBuilder(string.Empty);
            //a.AppendLine("declare @idWF varchar(256) ");
            a.AppendLine("declare @idUltimoIdPublicidad varchar(256) ");
            //a.AppendLine("update Configuracion set @idWF=Valor=convert(varchar(256), convert(int, Valor)+1) where IdItemConfig='UltimoIdWF' ");
            a.AppendLine("update Configuracion set @idUltimoIdPublicidad=Valor=convert(varchar(256), convert(int, Valor)+1) where IdItemConfig='UltimoIdPublicidad' ");
            a.Append("Insert Publicidad (IdCatalogo, IdPublicidad, IdUsuario, ImageUrl, NavigateUrl, AlternateText, Impression, Keyword, Estado) ");
            a.Append("values (");
            a.Append("'" + Publicidad.Catalogo + "', ");
            a.Append("@idUltimoIdPublicidad, ");
            a.Append("'" + Publicidad.Usuario.Id + "', ");
            a.Append("'" + Publicidad.ImageUrl + "', ");
            a.Append("'" + Publicidad.NavigateUrl + "', ");
            a.Append("'" + Publicidad.AlternateText + "', ");
            a.Append("'" + Publicidad.Impression + "', ");
            a.Append("'" + Publicidad.Keyword + "', ");
            a.Append("'" + Publicidad.WF.Estado + "' ");
            a.AppendLine(") ");
            //a.AppendLine("insert Log values (@idWF, getdate(), '" + sesion.Usuario.Id + "', 'Publicidad', 'Alta', '" + Publicidad.WF.Estado + "', '') ");
            a.AppendLine("Select @idUltimoIdPublicidad");
            a.AppendLine();
            DataTable dt = new DataTable();
            dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.Usa, sesion.CnnStr);
            int resp = 0;
            if (dt.Rows.Count != 0)
            {
                resp = Convert.ToInt32(dt.Rows[0][0].ToString());
            }
            return resp;
        }
        public void Modificar(Entidades.Publicidad Desde, Entidades.Publicidad Hasta)
        {
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("update Publicidad set ");
                a.Append("IdUsuario = '" + Hasta.Usuario.Id + "', ");
                a.Append("ImageUrl = '" + Hasta.ImageUrl + "', ");
                a.Append("NavigateUrl = '" + Hasta.NavigateUrl + "', ");
                a.Append("AlternateText = '" + Hasta.AlternateText + "', ");
                a.Append("Impression = '" + Hasta.Impression + "', ");
                a.Append("Keyword = '" + Hasta.Keyword + "' ");
                a.Append("where IdCatalogo = '" + Hasta.Catalogo + "' and IdPublicidad = " + Hasta.Id + " ");
                Ejecutar(a.ToString(), TipoRetorno.None, Transaccion.Usa, sesion.CnnStr);
            }
        }
        public void CambiarEstado(Entidades.Publicidad Publicidad, string Evento, string Estado)
        {
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("update Publicidad set ");
                a.Append("Estado='" + Estado + "' ");
                a.AppendLine("where IdPublicidad=" + Publicidad.Id);
                a.AppendLine("insert Log values (" + Publicidad.WF.Id.ToString() + ", getdate(), '" + sesion.Usuario.Id + "', 'Publicidad', '" + Evento + "', '" + Estado + "', '') ");
                Ejecutar(a.ToString(), TipoRetorno.None, Transaccion.Usa, sesion.CnnStr);
            }
        }
        public List<Entidades.Publicidad> ListaCompleta(string OrderBy, string ImageUrl, string NavigateUrl)
        {
            List<Entidades.Publicidad> lista = new List<Entidades.Publicidad>();
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select Publicidad.IdCatalogo, Publicidad.IdPublicidad, Publicidad.IdUsuario, Publicidad.ImageUrl, Publicidad.NavigateUrl, Publicidad.AlternateText, Publicidad.Impression, Publicidad.Keyword, Publicidad.Estado ");
            a.Append("from Publicidad where 1=1 ");
            if (!ImageUrl.Equals(string.Empty))
            {
                a.Append("and ImageUrl like '%" + ImageUrl + "%' ");
            }
            if (!NavigateUrl.Equals(string.Empty))
            {
                a.Append("and NavigateUrl like '%" + NavigateUrl + "%' ");
            }
            a.Append("and Estado = 'Active' ");
            a.Append("order by " + OrderBy);
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count != 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Entidades.Publicidad publicidad = new Entidades.Publicidad();
                    Copiar(dt.Rows[i], publicidad);
                    lista.Add(publicidad);
                }
            }
            return lista;
        }
        public List<Entidades.Publicidad> Lista(int IndicePagina, int TamañoPagina, string OrderBy, string SessionID, List<Entidades.Publicidad> PublicidadLista)
        {
            System.Text.StringBuilder a = new StringBuilder();
            a.Append("CREATE TABLE #Publicidad" + SessionID + "( ");
            a.Append("[IdCatalogo] [varchar](50) NOT NULL, ");
            a.Append("[IdPublicidad] [int] NOT NULL, ");
	        a.Append("[IdUsuario] [varchar](50) NOT NULL, ");
            a.Append("[ImageUrl] [varchar](250) NOT NULL, ");
            a.Append("[NavigateUrl] [varchar](250) NOT NULL, ");
            a.Append("[AlternateText] [varchar](250) NOT NULL, ");
	        a.Append("[Impression] [varchar](250) NOT NULL, ");
            a.Append("[Keyword] [varchar](250) NOT NULL, ");
            a.Append("[Estado] [varchar](15) NOT NULL, ");
            a.Append("CONSTRAINT [PK_Publicidad" + SessionID + "] PRIMARY KEY CLUSTERED ");
            a.Append("( ");
            a.Append("[IdPublicidad] ASC ");
            a.Append(")WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ");
            a.Append(") ON [PRIMARY] ");
            foreach (Entidades.Publicidad Publicidad in PublicidadLista)
            {
                a.Append("Insert #Publicidad" + SessionID + " values ('" + Publicidad.Catalogo + "', ");
                a.Append(Publicidad.Id + ", '");
                a.Append(Publicidad.Usuario.Id + "', '");
                a.Append(Publicidad.ImageUrl + "', '");
                a.Append(Publicidad.NavigateUrl + "', '");
                a.Append(Publicidad.AlternateText + "', '");
                a.Append(Publicidad.Impression + "', '");
                a.Append(Publicidad.Keyword + "', '");
                a.Append(Publicidad.Estado + "') ");
            }
            a.Append("select * ");
            a.Append("from (select top {0} ROW_NUMBER() OVER (ORDER BY {1}) as ROW_NUM, ");
            a.Append("IdCatalogo, IdPublicidad, IdUsuario, ImageUrl, NavigateUrl, AlternateText, Impression, Keyword, Estado ");
            a.Append("from #Publicidad" + SessionID + " ");
            a.Append("ORDER BY ROW_NUM) innerSelect WHERE ROW_NUM > {2} ");
            a.Append("DROP TABLE #Publicidad" + SessionID);
            if (OrderBy.Trim().ToUpper() == "IMAGEURL" || OrderBy.Trim().ToUpper() == "IMAGEURL DESC" || OrderBy.Trim().ToUpper() == "IMAGEURL ASC")
            {
                OrderBy = "#Publicidad" + SessionID + "." + OrderBy;
            }
            if (OrderBy.Trim().ToUpper() == "NAVIGATEURL" || OrderBy.Trim().ToUpper() == "NAVIGATEURL DESC" || OrderBy.Trim().ToUpper() == "NAVIGATEURL ASC")
            {
                OrderBy = "#Publicidad" + SessionID + "." + OrderBy;
            }
            string commandText = string.Format(a.ToString(), ((IndicePagina + 1) * TamañoPagina), OrderBy, (IndicePagina * TamañoPagina));
            DataTable dt = new DataTable();
            dt = (DataTable)Ejecutar(commandText.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            List<Entidades.Publicidad> lista = new List<Entidades.Publicidad>();
            if (dt.Rows.Count != 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Entidades.Publicidad publicidad = new Entidades.Publicidad();
                    publicidad.Catalogo = dt.Rows[i]["IdCatalogo"].ToString();
                    publicidad.Id = Convert.ToInt32(dt.Rows[i]["IdPublicidad"].ToString());
                    publicidad.Usuario.Id = dt.Rows[i]["IdUsuario"].ToString();
                    publicidad.ImageUrl = dt.Rows[i]["ImageUrl"].ToString();
                    publicidad.NavigateUrl = dt.Rows[i]["NavigateUrl"].ToString();
                    publicidad.AlternateText = dt.Rows[i]["AlternateText"].ToString();
                    publicidad.Impression = dt.Rows[i]["Impression"].ToString();
                    publicidad.Keyword = dt.Rows[i]["Keyword"].ToString();
                    publicidad.WF.Estado = dt.Rows[i]["Estado"].ToString();
                    lista.Add(publicidad);
                }
            }
            return lista;
        }
        public void Eliminar(Entidades.Publicidad Publicidad)
        {
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("delete Publicidad ");
                a.Append("where IdCatalogo = '" + Publicidad.Catalogo + "' and IdPublicidad = " + Publicidad.Id + " ");
                Ejecutar(a.ToString(), TipoRetorno.None, Transaccion.Usa, sesion.CnnStr);
            }
        }
    }
}
